package com.dhb.pattern.singleton.seriable;

import java.io.ObjectInputStream;
import java.io.Serializable;

/**
 * 功能描述：反序列化时导致单例破坏
 *     //序列化
 *     //就是把内存中的状态通过转换成字节码的形式
 *     //从而转换一个IO流，写入到其他地方(可以是磁盘、网络IO)
 *     //内存中状态给永久保存下来了
 *
 *     //反序列化
 *     //讲已经持久化的字节码内容，转换为IO流
 *     //通过IO流的读取，进而将读取的内容转换为Java对象
 *     //在转换过程中会重新创建对象new
 * 创建人：citymoon
 * 创建日期：2019/5/4
 */
public class SeriableSingleton implements Serializable {
    public static final SeriableSingleton INSTANCE = new SeriableSingleton();

    private SeriableSingleton(){}

    public static SeriableSingleton getInstance(){
        return INSTANCE;
    }

    // 通过查看JDK源码，ObjectInputStream 类的 readObject()方法
    // 增加该无参方法解决反序列化时导致单例破坏的问题
    private Object readResolve(){
        return INSTANCE;
    }
}
